package com.smile.commons.date;

import java.time.LocalDateTime;

public class DateTimeUtils {

    /**
     * 检查目标时间是否在开始和结束时间范围内（包含边界）
     *
     * @param targetTime 要检查的目标时间
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @return boolean  true-在范围内（包含边界），false-不在范围内
     */
    public static boolean isInRangeInclusive(LocalDateTime targetTime,
                                             LocalDateTime startTime,
                                             LocalDateTime endTime) {
        if (targetTime == null || startTime == null || endTime == null) {
            return false;
        }

        return (targetTime.isEqual(startTime) || targetTime.isAfter(startTime))
                && (targetTime.isEqual(endTime) || targetTime.isBefore(endTime));
    }

    /**
     * 检查目标时间是否超过了结束时间
     *
     * @param targetTime 要检查的目标时间
     * @param endTime    结束时间
     * @return boolean  true-已超过结束时间，false-未超过结束时间
     */
    public static boolean isAfterEndTime(LocalDateTime targetTime, LocalDateTime endTime) {
        if (targetTime == null || endTime == null) {
            return false;
        }

        return targetTime.isAfter(endTime);
    }

    /**
     * 检查目标时间是否在开始时间之前（不包含边界）
     *
     * @param targetTime 要检查的目标时间
     * @param startTime  开始时间
     * @return boolean  true-在开始时间之前，false-不在开始时间之前
     */
    public static boolean isBeforeStartTime(LocalDateTime targetTime, LocalDateTime startTime) {
        if (targetTime == null || startTime == null) {
            return false;
        }

        return targetTime.isBefore(startTime);
    }
}